home *** CD-ROM | disk | FTP | other *** search
- program main(input, output);
- { Shell Sort Benchmark }
- const
- ITERATIONS = 20000;
- NITEMS = 50;
- var
- list: array[1..NITEMS] of integer;
- x: array[1..NITEMS] of integer;
-
- i, j, t: integer;
-
- procedure shell_sort;
- { Shell sort based on insertion sort }
- var
- i, gap, j, n: integer;
- tempi, tempj: integer;
- stop, stop2: boolean;
-
- begin
- gap := NITEMS div 4 + 1;
- stop := false;
- while not stop do
- begin
- for i := gap + 1 to NITEMS do
- begin
- tempi := x[i];
- j := i - gap;
- stop2 := false;
- while not stop2 do
- begin
- tempj := x[j];
- if tempi >= tempj then
- begin
- j := j + gap;
- stop2 := true;
- end
- else
- begin
- x[j+gap] := tempj;
- if j <= gap then
- stop2 := true
- else
- j := j - gap;
- end;
- end;
- x[j] := tempi;
- end;
- if gap = 1 then
- stop := true
- else
- gap := gap div 4 + 1;
- end;
- end;
-
- begin
- list[1] := 9; list[2] := 34; list[3] := 14; list[4] := 18;
- list[5] := 33; list[6] := 46; list[7] := 11; list[8] := 13;
- list[9] := 7; list[10] := 26; list[11] := 22; list[12] := 10;
- list[13] := 36; list[14] := 40; list[15] := 2; list[16] := 28;
- list[17] := 32; list[18] := 1; list[19] := 23; list[20] := 31;
- list[21] := 43; list[22] := 5; list[23] := 24; list[24] := 42;
- list[25] := 45; list[26] := 50; list[27] := 16; list[28] := 3;
- list[29] := 47; list[30] := 39; list[31] := 21; list[32] := 49;
- list[33] := 41; list[34] := 6; list[35] := 19; list[36] := 30;
- list[37] := 20; list[38] := 35; list[39] := 44; list[40] := 38;
- list[41] := 25; list[42] := 15; list[43] := 27; list[44] := 17;
- list[45] := 8; list[46] := 4; list[47] := 29; list[48] := 37;
- list[49] := 48; list[50] := 12;
- for i := 1 to ITERATIONS do
- begin
- for j := 1 to NITEMS do
- x[j] := list[j];
- shell_sort;
- end;
- for i := 1 to NITEMS do
- write(x[i]);
- end.
-
-